<!DOCTYPE html>
<html lang="en">

<!-- Head tag -->
<head><meta name="generator" content="Hexo 3.9.0">

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">

    <!--Description-->
    
        <meta name="description" content="爬虫系统分为如下3种类型：
批量型爬虫：批量型爬虫有比较明确的抓取范围和目标，当爬虫达到这个设定的目标后，即停止抓取过程。至于具体目标可能各异，也许是设定抓取一定数量的网页即可，也许是设定抓取的时间等，各不一样。
增量型爬虫：增量型爬虫与批量型爬虫不同，会保持持续不断的抓取，对于抓取到的网页，要定期">
    

    <!--Author-->
    
        <meta name="author" content="ck">
    

    <!--Open Graph Title-->
    
        <meta property="og:title" content="爬虫的概念祥解">
    

    <!--Open Graph Description-->
    

    <!--Open Graph Site Name-->
    <meta property="og:site_name" content="CK">

    <!--Type page-->
    
        <meta property="og:type" content="article">
    

    <!--Page Cover-->
    

    <meta name="twitter:card" content="summary">
    

    <!-- Title -->
    
    <title>爬虫的概念祥解 - CK</title>

    <!-- Bootstrap Core CSS -->
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" integrity="sha384-y3tfxAZXuh4HwSYylfB+J125MxIs6mR5FOHamPBG064zB+AFeWH94NdvaCBm8qnd" crossorigin="anonymous">

    <!-- Custom Fonts -->
    <link href="//maxcdn.bootstrapcdn.com/font-awesome/4.6.3/css/font-awesome.min.css" rel="stylesheet" type="text/css">

    <!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
        <script src="//oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
        <script src="//oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
    <![endif]-->

    <!-- Gallery -->
    <link href="//cdnjs.cloudflare.com/ajax/libs/featherlight/1.3.5/featherlight.min.css" type="text/css" rel="stylesheet">

    <!-- Custom CSS -->
    <link rel="stylesheet" href="/blog/css/style.css">

    <!-- Google Analytics -->
    


</head>


<body>

<div class="bg-gradient"></div>
<div class="bg-pattern"></div>

<!-- Menu -->
<!--Menu Links and Overlay-->
<div class="menu-bg">
    <div class="menu-container">
        <ul>
            
            <li class="menu-item">
                <a href="/blog/">
                    Home
                </a>
            </li>
            
            <li class="menu-item">
                <a href="/blog/archives">
                    Archives
                </a>
            </li>
            
            <li class="menu-item">
                <a href="/blog/about.html">
                    About
                </a>
            </li>
            
            <li class="menu-item">
                <a href="/blog/tags">
                    Tags
                </a>
            </li>
            
            <li class="menu-item">
                <a href="/blog/categories">
                    Categories
                </a>
            </li>
            
            <li class="menu-item">
                <a href="/blog/contact.html">
                    Contact
                </a>
            </li>
            
        </ul>
    </div>
</div>

<!--Hamburger Icon-->
<nav>
    <a href="#menu"></a>
</nav>

<div class="container">

    <!-- Main Content -->
    <div class="row">
    <div class="col-sm-12">

        <!--Title and Logo-->
        <header>
    <div class="logo">
        <a href="/blog/"><i class="logo-icon fa fa-cube" aria-hidden="true"></i></a>
        
    </div>
</header>

        <section class="main">
            
<div class="post">

    <div class="post-header">
        <h1 class="title">
            <a href="/blog/2019/08/12/爬虫的概念祥解/">
                爬虫的概念祥解
            </a>
        </h1>
        <div class="post-info">
            
                <span class="date">2019-08-12</span>
            
            
            
        </div>
    </div>

    <div class="content">

        <!-- Gallery -->
        

        <!-- Post Content -->
        <p>爬虫系统分为如下3种类型：</p>
<p>批量型爬虫：<br>批量型爬虫有比较明确的抓取范围和目标，当爬虫达到这个设定的目标后，即停止抓取过程。至于具体目标可能各异，也许是设定抓取一定数量的网页即可，也许是设定抓取的时间等，各不一样。</p>
<p>增量型爬虫：<br>增量型爬虫与批量型爬虫不同，会保持持续不断的抓取，对于抓取到的网页，要定期更新，因为互联网网页处于不断变化中，新增网页、网页被删除或者网页内容更改都很常见，而增量型爬虫需要及时反映这种变化，所以处于持续不断的抓取过程中，不是在抓取新网页，就是在更新已有网页。通用的商业搜索引擎爬虫基本都属此类。</p>
<p>垂直型爬虫：<br>垂直型爬虫关注特定主题内容或者属于特定行业的网页，比如对于健康网站来说，只需要从互联网页面里找到与健康相关的页面内容即可，其他行业的内容不在考虑范围。垂直型爬虫一个最大的特点和难点就是：如何识别网页内容是否属于指定行业或主题。从节省系统资源的角度来讲，不可能把所有互联网页面下载之后在进行筛选，这样会造成资源过度浪费，往往需要爬虫在抓取阶段就能够动态识别某个网址是否与主题相关，并尽量不去抓取无关页面，以达到节省资源的目的。垂直搜索网站或者垂直行业网站往往需要此种类型的爬虫。</p>
<p>优秀爬虫的特性<br>优秀爬虫的特性对于不同的应用来说，可能实现的方式各有差异，但是实用的爬虫都应该具备以下特性：<br>01高性能<br>互联网的网页数量是海量的。所以爬虫的性能至关重要，这里的性能主要是指爬虫下载网页的抓取速度，常见的评价方式是以爬虫每秒能够下载的网页数量作为性能指标，单位时间能够下载的网页数量越多，爬虫的性能越高。要提高爬虫的性能，在设计时程序访问磁盘的操作方法及具体实现时数据结构的选择很关键，比如对于待抓取URL队列和已抓取URL队列，因为URL数量非常大，不同实现方式性能表现迥异，所以高效的数据结构对于爬虫性能影响很大。<br>02可扩展性<br>即使单个爬虫的性能很高，要将所有网页都下载到本地，仍然需要相当长的时间周期，为了能够尽可能缩短抓取周期，爬虫系统应该有很好地可扩展性，即很容易通过增加抓取服务器和爬虫数量来达到此目的。目前实用的大型网络爬虫一定是分布式运行的，即多台服务器专做抓取，每台服务器部署多个爬虫，每个爬虫多线程运行，通过多种方式增加并发性。对于巨型的搜索引擎服务商来说，可能还要在全球范围、不同地域分别部署数据中心，爬虫也被分配到不同的数据中心，这样对于提高爬虫系统的整体性能是很有帮助的。<br>03健壮性<br>爬虫要访问各种类型的网站服务器，可能会遇到很多种非正常情况，比如网页HTML编码不规范， 被抓取服务器突然死机，甚至爬虫陷阱等。爬虫对各种异常情况能否正确处理非常重要，否则可能会不定期停止工作，这是无法忍受的。从另外一个角度来讲，假设爬虫程序在抓取过程中死掉，或者爬虫所在的服务器宕机，健壮的爬虫应能做到，再次启动爬虫时，能够恢复之前抓取的内容和数据结构，而不是每次都需要把所有工作完全从头做起，这也是爬虫健壮性的一种体现。<br>04友好性<br>爬虫的友好性包含两方面的含义：一是保护网站的部分私密性，另一是减少被抓取网站的网络负载。爬虫抓取的对象是各类型的网站，对于网站所有者来说，有些内容并不希望被所有人搜到，所以需要设定协议，来告知爬虫哪些内容是不允许抓取的。目前有两种主流的方法可达到此目的：爬虫禁抓协议和网页禁抓标记。</p>
<p>爬虫禁抓协议<br>指的是由网站所有者生成一个指定的文件robot.txt，并放在网站服务器的根目录下，这个文件指明了网站中哪些目录下的网页是不允许爬虫抓取的。具有友好性的爬虫在抓取该网站的网页前，首先要读取robot.txt文件，对于禁止抓取的网页不进行下载。<br>网页禁抓标记一般在网页的HTML代码里加入meta name=”robots”标记，content字段指出允许或者不允许爬虫的哪些行为。可以分为两种情形，一种是告知爬虫不要索引该网页内容，以noindex作为标记；另外一种情形是告知爬虫不要抓取网页所包含的链接，以nofollow作为标记。通过这种方式，可以达到对网页内容的一种隐私保护。<br>遵循以上协议的爬虫可以被认为是友好的，这是从保护私密性的角度来考虑的。另外一种友好性则是，希望爬虫对某网站的访问造成的网路负载较低。爬虫一般会根据网页的链接连续获取某网站的网页，如果爬虫访问网站频率过高，会给网站服务器造成很大的访问压力，有时候甚至会影响网站的正常访问，造成类似DOS攻击的效果，为了减少网站的网络负载，友好性的爬虫应该在抓取策略部署时考虑每个被抓取网站的负载，在尽可能不影响爬虫性能的情况下，减少对单一站点短期内的高频访问。</p>
<p>爬虫质量的评价标准<br>如果从搜索引擎用户体验的角度考虑，对爬虫的工作效果有不同的评价标准，其中最主要的3个标准是：<br>1、抓取网页的覆盖率<br>2、抓取网页时新性<br>3、抓取网页重要性。</p>
<p>数据流（流程，类似抓取任务生命周期）</p>
<p>Scrapy中的数据流由执行引擎控制，其过程如下:<br>1.引擎打开一个网站(open adomain)，找到处理该网站的Spider并向该spider请求第一个要爬取的URL(s)。<br>2.引擎从Spider中获取到第一个要爬取的URL并在调度器(Scheduler)以Request调度。<br>3.引擎向调度器请求下一个要爬取的URL。<br>4.调度器返回下一个要爬取的URL给引擎，引擎将URL通过下载中间件(请求(request)方向)转发给下载器(Downloader)。<br>5.一旦页面下载完毕，下载器生成一个该页面的Response，并将其通过下载中间件(返回(response)方向)发送给引擎。<br>6.引擎从下载器中接收到Response并通过Spider中间件(输入方向)发送给Spider处理。<br>7.Spider处理Response并返回爬取到的Item及(跟进的)新的Request给引擎。<br>8.引擎将(Spider返回的)爬取到的Item给ItemPipeline，将(Spider返回的)Request给调度器。<br>9.(从第二步)重复直到调度器中没有更多地request，引擎关闭该网站。</p>
<p>分布式爬虫<br>Scrapy-Redis是一个基于Redis的Scrapy分布式组件.它利用Redis对用于爬取的请求(Requests)进行存储和调度(Schedule)，并对爬取产生的项目(items)存储以供后续处理使用,scrapy-redi重写了scrapy一些比较关键的代码,将scrapy变成一个可以在多个主机上同时运行的分布式爬虫。</p>
<p>代理ip<br>当爬取速度过快时，当请求次数过多时都面临ip被封的可能。因此使用代理也是必备的。</p>
<p>代理池的概念<br>抓取市面上所有免费代理网站的ip，比如西刺代理，快代理等<br>代理池维护存储 redis 因为代理ip生命周期很短，属于热数据，不适合持久化存储<br>使用时随机取出一个代理ip使用</p>
<p>使用request加代理<br>import requests<br>proxies = { “http”: “<a href="http://10.10.1.10:3128&quot;" target="_blank" rel="noopener">http://10.10.1.10:3128&quot;</a>,<br>            “https”: “<a href="http://10.10.1.10:1080&quot;,}" target="_blank" rel="noopener">http://10.10.1.10:1080&quot;,}</a><br>p = request.get(“<a href="http://www.baidu.com&quot;" target="_blank" rel="noopener">http://www.baidu.com&quot;</a>, proxies = proxies)<br>print(p.content.decode(‘utf-8’))</p>
<p>抓取App端数据<br>使用Charles抓包<br>软件地址 <a href="https://www.charlesproxy.com/download/" target="_blank" rel="noopener">https://www.charlesproxy.com/download/</a><br>为什么选择Charles 跨平台，方便好用，可以抓取Android应用也可以抓取Ios<br>可以抓取http https</p>
<p>抓取视频<br>使用三方库 you-get<br>配合Fiddler抓包来抓取视频流</p>
<p>应对反爬<br>headers头文件<br>有些网站对爬虫反感，对爬虫请求一律拒绝，这时候我们需要伪装成浏览器，通过修改http中的headers来实现<br>伪造Cookie<br>模拟登陆<br>一般登录的过程都伴随有验证码，这里我们通过selenium自己构造post数据进行提交，将返回验证码图片的链接地址输出到控制台下，点击图片链接识别验证码，输入验证码并提交，完成登录</p>

    </div>

    

    

    <!-- Comments -->
    

</div>
        </section>

    </div>
</div>


</div>

<!-- Footer -->
<div class="push"></div>

<footer class="footer-content">
    <div class="container">
        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-6 col-lg-6 footer-about">
                <h2>About</h2>
                <p>
                    This theme was developed by <a href="https://github.com/klugjo">Jonathan Klughertz</a>. The source code is available on Github. Create Websites. Make Magic.
                </p>
            </div>
            
    <div class="col-xs-6 col-sm-6 col-md-3 col-lg-3 recent-posts">
        <h2>Recent Posts</h2>
        <ul>
            
            <li>
                <a class="footer-post" href="/blog/2019/08/12/如何快速搭建hexo技术博客/">如何快速搭建hexo技术博客</a>
            </li>
            
            <li>
                <a class="footer-post" href="/blog/2019/08/12/二进制字典数据处理/">二进制字典数据处理</a>
            </li>
            
            <li>
                <a class="footer-post" href="/blog/2019/08/12/Dos-命令手记/">Dos-命令手记</a>
            </li>
            
            <li>
                <a class="footer-post" href="/blog/2019/08/12/Mysql-命令手记/">Mysql-命令手记</a>
            </li>
            
        </ul>
    </div>



            
        </div>
        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
                <ul class="list-inline footer-social-icons">
                    
                    <li class="list-inline-item">
                        <a href="https://github.com/klugjo/hexo-theme-alpha-dust">
                            <span class="footer-icon-container">
                                <i class="fa fa-github"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="https://twitter.com/?lang=en">
                            <span class="footer-icon-container">
                                <i class="fa fa-twitter"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="https://www.facebook.com/">
                            <span class="footer-icon-container">
                                <i class="fa fa-facebook"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="https://www.instagram.com/">
                            <span class="footer-icon-container">
                                <i class="fa fa-instagram"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="https://dribbble.com/">
                            <span class="footer-icon-container">
                                <i class="fa fa-dribbble"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="https://plus.google.com/">
                            <span class="footer-icon-container">
                                <i class="fa fa-google-plus"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="https://www.behance.net/">
                            <span class="footer-icon-container">
                                <i class="fa fa-behance"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="https://500px.com/">
                            <span class="footer-icon-container">
                                <i class="fa fa-500px"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="mailto:test@example.com">
                            <span class="footer-icon-container">
                                <i class="fa fa-envelope-o"></i>
                            </span>
                        </a>
                    </li>
                    
                    
                    <li class="list-inline-item">
                        <a href="\#">
                            <span class="footer-icon-container">
                                <i class="fa fa-rss"></i>
                            </span>
                        </a>
                    </li>
                    
                </ul>
            </div>
        </div>
        <div class="row">
            <div class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
                <div class="footer-copyright">
                    @Untitled. All right reserved | Design & Hexo <a href="http://www.codeblocq.com/">Jonathan Klughertz</a>
                </div>
            </div>
        </div>
    </div>
</footer>

<!-- After footer scripts -->

<!-- jQuery -->
<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>

<!-- Tween Max -->
<script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.18.5/TweenMax.min.js"></script>

<!-- Gallery -->
<script src="//cdnjs.cloudflare.com/ajax/libs/featherlight/1.3.5/featherlight.min.js" type="text/javascript" charset="utf-8"></script>

<!-- Custom JavaScript -->
<script src="/blog/js/main.js"></script>

<!-- Disqus Comments -->



</body>

</html>